lexer grammar smartidl;
@header {
	package org.latestbit.smartobjects.smartidlc.parser;
	
	import java.util.ArrayList;
	import java.util.Collection;	
	import org.latestbit.smartobjects.smartidlc.model.*;
	import org.latestbit.smartobjects.smartidlc.util.*;
}

T23 : 'namespace' ;
T24 : ';' ;
T25 : 'import' ;
T26 : 'typedef' ;
T27 : 'as' ;
T28 : 'encrypted' ;
T29 : 'required' ;
T30 : '(' ;
T31 : ')' ;
T32 : 'unsigned' ;
T33 : 'byte' ;
T34 : 'int16' ;
T35 : 'int32' ;
T36 : 'int64' ;
T37 : 'integer' ;
T38 : 'float' ;
T39 : 'double' ;
T40 : 'number' ;
T41 : 'max-precision' ;
T42 : '=' ;
T43 : 'unicode' ;
T44 : 'string' ;
T45 : 'char' ;
T46 : 'boolean' ;
T47 : 'datetime' ;
T48 : 'to' ;
T49 : ',' ;
T50 : 'allowed' ;
T51 : 'array' ;
T52 : 'of' ;
T53 : 'list' ;
T54 : 'map' ;
T55 : 'by' ;
T56 : 'enum' ;
T57 : '{' ;
T58 : '}' ;
T59 : 'structure' ;
T60 : 'extends' ;
T61 : 'exception' ;
T62 : 'choice' ;
T63 : 'interface' ;
T64 : 'sessionid' ;
T65 : 'void' ;
T66 : 'throws' ;
T67 : '.' ;
T68 : 'null' ;
T69 : 'true' ;
T70 : 'false' ;

// $ANTLR src "smartidl.g" 485
HexLiteral : '0' ('x'|'X') HexDigit+  ;

// $ANTLR src "smartidl.g" 487
DecimalLiteral : SignPrefix? ('0' | '1'..'9' '0'..'9'*) ;

// $ANTLR src "smartidl.g" 489
OctalLiteral : '0' ('0'..'7')+ ;

// $ANTLR src "smartidl.g" 491
fragment
HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;

// $ANTLR src "smartidl.g" 494
fragment
IntegerTypeSuffix : ('l'|'L') ;

// $ANTLR src "smartidl.g" 497
fragment
SignPrefix : ('-') ;

// $ANTLR src "smartidl.g" 510
FloatingPointLiteral
    :  SignPrefix? ( 
    	('0'..'9')+ '.' ('0'..'9')* Exponent? 
    |   '.' ('0'..'9')+ Exponent?
    |   ('0'..'9')+ Exponent
    |   ('0'..'9')+ 
    )
    ;

// $ANTLR src "smartidl.g" 519
fragment
Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;

// $ANTLR src "smartidl.g" 522
fragment
FloatTypeSuffix : ('f'|'F'|'d'|'D') ;

// $ANTLR src "smartidl.g" 525
CharacterLiteral
    :   '\'' ( EscapeSequence | ~('\''|'\\') ) '\''
    ;

// $ANTLR src "smartidl.g" 529
StringLiteral
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
    ;

// $ANTLR src "smartidl.g" 533
fragment
EscapeSequence
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   UnicodeEscape
    |   OctalEscape
    ;

// $ANTLR src "smartidl.g" 540
fragment
OctalEscape
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

// $ANTLR src "smartidl.g" 547
fragment
UnicodeEscape
    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
    ;
// $ANTLR src "smartidl.g" 551
Identifier 
    :   Letter (Letter|DecimalLiteral)*
    ;

// $ANTLR src "smartidl.g" 555
fragment
Letter
    :  '\u0024' |
       '\u0041'..'\u005a' |
       '\u005f' |
       '\u0061'..'\u007a' |
       '\u00c0'..'\u00d6' |
       '\u00d8'..'\u00f6' |
       '\u00f8'..'\u00ff' |
       '\u0100'..'\u1fff' |
       '\u3040'..'\u318f' |
       '\u3300'..'\u337f' |
       '\u3400'..'\u3d2d' |
       '\u4e00'..'\u9fff' |
       '\uf900'..'\ufaff'
    ;
// $ANTLR src "smartidl.g" 571
WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
    ;

// $ANTLR src "smartidl.g" 574
COMMENT
    :   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
    ;

// $ANTLR src "smartidl.g" 578
LINE_COMMENT
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    ;    
